<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');
require_once ('./application/controllers/authenticate.php');

class Role extends Authenticate {

    const ROLE_PER_PAGE = 100;
    const ROLE_PAGE_RANGE = 5;

    function __construct() {
        global $active_system_function;
        $active_system_function = 'admin/site/role/index';
        parent::__construct();
        $this->load->model('site_role_model');
        $this->load->model('site_privilege_model');
    }

    protected function _eventLoadLayout() {
        $this->page['title'] = 'Quản lý chức vụ';
        $this->module['title'] = 'Quản lý chức vụ';
    }

    function index() {
        try {
            $data = $this->_initData();
            $data['mode'] = 'grid';
            $this->setPageContent('admin/site/role/grid', $data);
            $this->renderLayout('layouts/fullcolumn');
        } catch (Exception $ex) {
            echo $ex->getMessage();
        }
    }

    protected function _initData() {
        $data['collection'] = $this->site_role_model->get_roles();
        $data['privileges'] = $this->site_privilege_model->get_privileges();
        $data['system_privileges'] = $this->site_privilege_model->get_system_privileges();
        $data['save_action'] = site_url('admin/site/role/save', true);
        return $data;
    }

    function save() {
        try {
            $id = $this->input->post('id');
            $mode = $this->input->post('mode');
            $data = $this->input->post('data');
            if (empty($id)) {
                $id = $this->site_role_model->add_role($data);
                $this->st_registry->register('admin/site/role/success', 'Thêm mới chức vụ thành công');
            } else {
                $role = $this->site_role_model->load_by_id($id);
                // Check System Role
                if (intval($role->is_system) == 1) {
                    $this->st_registry->register('admin/site/role/error', 'Không thể sửa đổi thông tin hệ thống');
                    redirect(site_url('admin/site/role/index', true));
                    exit();
                }
                $this->site_role_model->update_role($id, $data);
                $this->st_registry->register('admin/site/role/success', 'Cập nhật thông tin chức vụ thành công');
            }            
        } catch (Exception $ex) {
            $this->st_registry->register('admin/site/role/error', 'Lỗi xảy ra: ' . $ex->getMessage());
        }
        redirect(site_url('admin/site/role/index', true));
    }

    function ajax_edit() {
        try {
            $id = $this->input->getParam('id');
            if (empty($id)) {
                throw new Exception('Không tìm thấy chức vụ theo ID');
                exit();
            }
            $data['role'] = $this->site_role_model->load_by_id($id);
            $data['privileges'] = $this->site_privilege_model->get_privileges();
            $data['system_privileges'] = $this->site_privilege_model->get_system_privileges();
            $data['save_action'] = site_url('admin/site/role/save', true);
            $data['mode'] = 'ajax_edit';
            $this->setPageContent('admin/site/role/ajax/edit', $data);
            $this->renderLayout('layouts/ajax');
        } catch (Exception $ex) {
            $this->st_registry->register('admin/site/role/error', 'Lỗi xảy ra: ' . $ex->getMessage());
        }
    }

    function ajax_show_privileges() {
        $id = intval($this->input->getParam('id'));
        if (empty($id)) {
            throw new Exception('Không tìm thấy chức vụ theo ID');
            exit();
        }
        $data['role'] = $this->site_role_model->load_by_id($id);
        $data['privileges'] = $this->site_privilege_model->get_privileges();
        $data['system_privileges'] = $this->site_privilege_model->get_system_privileges();
        $this->setPageContent('admin/site/role/ajax/privileges', $data);
        $this->renderLayout('layouts/ajax');
    }

    function edit() {
        try {
            $id = $this->input->getParam('id');
            if (empty($id)) {
                throw new Exception('Không xác định được chức vụ cần sửa đổi thông tin');
                exit();
            }
            $data = $this->_initData();
            $data['role'] = $this->site_role_model->load_by_id($id);
            $data['privileges'] = $this->site_privilege_model->get_privileges();
            $data['mode'] = 'edit';
            $this->setPageContent('admin/site/role/grid', $data);
            $this->renderLayout('layouts/fullcolumn');
        } catch (Exception $ex) {
            $this->st_registry->register('admin/site/role/error', 'Lỗi xảy ra: ' . $ex->getMessage());
        }
    }

    function delete() {
        try {
            $id = $this->input->getParam('id');
            if (empty($id)) {
                $this->st_registry->register('admin/site/role/error', 'Không xác định được chức vụ cần xóa (ID)?');
                redirect(site_url('admin/site/role/index', true));
                exit();
            }
            $role = $this->site_role_model->load_by_id($id);
            // Check System Role
            if (intval($role->is_system) == 1) {
                $this->st_registry->register('admin/site/role/error', 'Không thể sửa đổi thông tin hệ thống');
                redirect(site_url('admin/site/role/index', true));
                exit();
            }
            $this->site_role_model->delete_role($id);
            $this->st_registry->register('admin/site/role/success', 'Xóa chức vụ thành công');
        } catch (Exception $ex) {
            $this->st_registry->register('admin/site/role/error', 'Lỗi xảy ra: ' . $ex->getMessage());
        }
        redirect(site_url('admin/site/role/index', true));
    }

}